﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
using System.Windows.Forms;
using eRechnung.Properties;
using ebDoc = eRechnung.Globals;


namespace eRechnung
{
    public partial class FrmEbInterfaceSettings : Form
    {
        private string mwst_message = "MwSt muss numerisch ohne % Zeichen sein und >= 0 und <=99 sein";
        public FrmEbInterfaceSettings()
        {
            InitializeComponent();
            txtName.Text = Settings.Default.setName;
            txtBxBank.Text = Settings.Default.setBank;
            txtBxEmail.Text = Settings.Default.setEmail;
            txtBxKtonr.Text = Settings.Default.setKontonr;
            txtBxKtoWortlaut.Text = Settings.Default.setKontowortlaut;
            txtBxPhone.Text = Settings.Default.setTelNr;
            txtBxPLZ.Text = Settings.Default.setPLZ;
            txtBxStrasse.Text = Settings.Default.setStrasse;
            txtBxVATID.Text = Settings.Default.setVATID;
            txtBLZ.Text = Settings.Default.setBLZ;
            txtIBAN.Text = Settings.Default.setIBAN;
            txtBxOrt.Text = Settings.Default.setOrt;
            txtBxBillerContact.Text = Settings.Default.setBillerContact;
            txBxBIC.Text = Settings.Default.setBIC;
            this.dsInvoice.LoadMwStTab();
            decimal DefaultMwSt = Settings.Default.setMwStDefault;
            if (Settings.Default.SetVStBerechtigt==false)
            {
                DefaultMwSt = 0;
                cBxDefaultMwSt.Enabled = false;
            }
            cBxDefaultMwSt.Text = DefaultMwSt.ToString("0.00");
            txtBxVStText.Text = Settings.Default.SetVStText;

            // Währung
            ebDoc.ThisDocument.InvXSD.FillCountryCCbox(cBxCurrency);
            // Bank Land
            ebDoc.ThisDocument.XlateTables.FillCountryCCbox(cBxBankCountry);
            // Rechnungsaussteller Land
            ebDoc.ThisDocument.XlateTables.FillCountryCCbox(cBxBillerCountry);
            // cbxSaveLocal.Checked = Settings.Default.setSaveLocal;
            tbxLocalFilePath.Text = Settings.Default.setLocalPath;
            tbxTemplatePath.Text = Settings.Default.setTemplatePath;
            ckBxVstBerechtigt.Checked = Settings.Default.SetVStBerechtigt;
            
        }

        /// <summary>
        /// Schliesst das Fenster
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnCancel_Click(object sender, EventArgs e)
        {
            this.Close();

        }
        /// <summary>
        /// Speichert die Änderungen in den Einstellungen und 
        /// übernimmt optional die Änderungen in das Dokument
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnSave_Click(object sender, EventArgs e)
        {

            Settings.Default.setLocalPath = tbxLocalFilePath.Text;
            Settings.Default.setTemplatePath = tbxTemplatePath.Text;
            // Settings.Default.setSaveLocal = true; // nicht ändern! bleibt wie es ist sonst gibts verwicklungen mit Handy Einstellungen
            Settings.Default.setName = txtName.Text;
            Settings.Default.setBank = txtBxBank.Text;
            Settings.Default.setEmail = txtBxEmail.Text;
            Settings.Default.setKontonr = txtBxKtonr.Text;
            Settings.Default.setKontowortlaut = txtBxKtoWortlaut.Text;
            Settings.Default.setTelNr = txtBxPhone.Text;
            Settings.Default.setPLZ = txtBxPLZ.Text;
            Settings.Default.setStrasse = txtBxStrasse.Text;
            Settings.Default.setVATID = txtBxVATID.Text;
            Settings.Default.setBLZ = txtBLZ.Text;
            Settings.Default.setIBAN = txtIBAN.Text;
            Settings.Default.setOrt = txtBxOrt.Text;
            Settings.Default.setBankLand = cBxBankCountry.SelectedItem.ToString();
            Settings.Default.setLand = cBxBillerCountry.SelectedItem.ToString();
            Settings.Default.setWhrg = cBxCurrency.SelectedItem.ToString();
            Settings.Default.setBillerContact = txtBxBillerContact.Text;
            Settings.Default.setBIC = txBxBIC.Text;
            Settings.Default.SetVStBerechtigt = ckBxVstBerechtigt.Checked;
            Settings.Default.SetVStText = txtBxVStText.Text;
            if (this.dsInvoice.TblMWST.Count == 0)
            {
                Settings.Default.setMwStTab = "";
                Settings.Default.setMwStDefault = 0;
                ebDoc.Ribbons.ebI_Ribbon.SetRibbonButtonsEnable(false);
            }
            else
            {
                Settings.Default.setMwStTab = this.dsInvoice.ToStringAsXml(this.dsInvoice.TblMWST);
                Settings.Default.setMwStDefault = decimal.Parse("0" + cBxDefaultMwSt.Text);
                ebDoc.Ribbons.ebI_Ribbon.SetRibbonButtonsEnable(true);
            }
            Settings.Default.Save();
            if (cbSave2Doc.Checked == true)
            {
                // Änderungen in das Dokument speichern 
                ebDoc.ThisDocument.Settings2Doc(this.dsInvoice);
                
            }
            this.Close();
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (this.dataGridView1.Columns[e.ColumnIndex].Name == "BtnDel")
            {
                int zeilen = this.dataGridView1.Rows.Count;
                if (zeilen>2)
                {
                    decimal MwSt = decimal.Parse(dataGridView1.Rows[e.RowIndex].Cells["spMwStData"].Value.ToString());
                    if (MwSt == -1)
                    {
                        MessageBox.Show("Zeile nicht gelöscht.\nDer Wert -1 kennzeichnet \"nicht steuerbare\" Umsätze gemäß UStG..");
                    }
                    else
                    {
                        if (ebDoc.ThisDocument.IsMwStUsedInDetails(MwSt) == true)
                        {
                            MessageBox.Show("Zeile nicht gelöscht. \nDer MwSt Satz " + MwSt.ToString() + " wird in den Rechnungsdetails verwendet.\n" +
                                "Fügen Sie zunächst den gewünschten MwSt Stz hinzu und ändern Sie dann die Rechnungsdetails.\n" +
                                "Danach kann dieser MwSt Satz gelöscht werden");
                        }
                        else
                        {
                            this.dataGridView1.Rows.RemoveAt(e.RowIndex);
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Zeile nicht gelöscht.\nEs muss mindestens einen Eintrag in der MwSt Tabelle geben. Wenn Sie nicht MwSt pflichtig sind, geben Sie 0 ein");
                }
            }

        }

        private void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            int n = dataGridView1.CurrentCell.ColumnIndex;
            if (this.dataGridView1.Columns[n].Name == "BtnDel")
            {
                dataGridView1.CurrentCell.Selected = false;
            }
        }

        private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            this.dataGridView1.CurrentCell.ErrorText = "";
            decimal decMwSt = 0;
            if (this.dataGridView1.Columns[e.ColumnIndex].Name == "spMwStData")
            {
                string mwst = this.dataGridView1.CurrentCell.EditedFormattedValue.ToString();
                try
                {
                    decMwSt = Decimal.Parse(mwst);
                    //if ((decMwSt>99) || ((decMwSt<0) && (decMwSt!=-1)))
                    if ((decMwSt > 99) || (decMwSt < 0))
                    {
                        this.dataGridView1.CurrentCell.ErrorText = "MwSt > 99 oder < 0 nicht möglich.";
                        e.Cancel = true;
                    }
                }
                catch (Exception ex)
                {
                    // mwst_message
                    this.dataGridView1.CurrentCell.ErrorText = mwst_message;
                    e.Cancel = true;
                }
                if (e.Cancel != true)
                {
                    mwst = this.dataGridView1.CurrentCell.Value.ToString();
                    if (mwst!="")
                    {
                        decimal decMwStAlt = decimal.Parse(mwst);
                        if ((decMwSt != decMwStAlt) && (ebDoc.ThisDocument.IsMwStUsedInDetails(decMwStAlt) == true))
                        {
                            MessageBox.Show("Der MwSt Satz " + decMwSt.ToString("0.00") + " wird in den Rechnungsdetails verwendet und kann daher nicht geändert werden", "Einstellungen", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            e.Cancel = true;
                        }

                    }
                }
                else
                {
                    MessageBox.Show(mwst_message + "\n'Speichern' oder 'Abbruch' ist erst nach Eingabe eines korrekten Wertes möglich", 
                        "Einstellungen", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

        }

        private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {

            if (this.dataGridView1.Columns[e.ColumnIndex].Name == "spMwStData")
            {
                // MessageBox.Show(mwst_message, "Einstellungen", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.dataGridView1.CurrentCell.ErrorText = mwst_message;
                e.Cancel = true;
            }
        }

        private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            this.dataGridView1.CurrentCell.ErrorText = "";
        }

        private void btnGetTemplateFolder_Click(object sender, EventArgs e)
        {

            fBDInvFolder.SelectedPath = tbxLocalFilePath.Text;
            DialogResult rc = fBDInvFolder.ShowDialog();
            if (rc != DialogResult.OK)
            {
                return;
            }
            tbxTemplatePath.Text = fBDInvFolder.SelectedPath;
            return;
        }

        private void btnGetFolder_Click(object sender, EventArgs e)
        {
            fBDInvFolder.SelectedPath = tbxLocalFilePath.Text;
            DialogResult rc = fBDInvFolder.ShowDialog();
            if (rc != DialogResult.OK)
            {
                return;
            }
            tbxLocalFilePath.Text = fBDInvFolder.SelectedPath;
            return;

        }

        private void ckBxVstBerechtigt_CheckStateChanged(object sender, EventArgs e)
        {
            if (ckBxVstBerechtigt.Checked == true)
            {
                cBxDefaultMwSt.Enabled = true;
                txtBxVATID.Enabled = true;
                txtBxVStText.Enabled = false;
            }
            else 
            {
                cBxDefaultMwSt.Enabled = false;
                //decimal DefaultMwSt = 0;
                //decimal MwST;
                // cBxDefaultMwSt.Text = DefaultMwSt.ToString("0.00");
                int i = 0;
                i = dsInvoice.GetMwStIndex(0);
                cBxDefaultMwSt.SelectedIndex = i;
                cBxDefaultMwSt.Enabled = false;
                txtBxVATID.Text = "00000000";
                txtBxVATID.Enabled = false;
                txtBxVStText.Enabled = true;
            }
        }

        private void txtBxVStText_Validating(object sender, CancelEventArgs e)
        {
            if (ckBxVstBerechtigt.Checked == true)
            {
                e.Cancel = false;
                return;
            }
            else
            {
                if (txtBxVStText.Text=="")
                {
                    MessageBox.Show("Wenn Berechtigung zum VST Abzug=Nein, dann muss hier ein Hinweistext eingegeben werden.", "Einstellungen",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    e.Cancel = true;
                    return;
                }
            }
        }

        private void SetDefaultValues()
        {
            txtName.Text = Settings.Default.setName;
            txtBxBank.Text = Settings.Default.setBank;
            txtBxEmail.Text = Settings.Default.setEmail;
            txtBxKtonr.Text = Settings.Default.setKontonr;
            txtBxKtoWortlaut.Text = Settings.Default.setKontowortlaut;
            txtBxPhone.Text = Settings.Default.setTelNr;
            txtBxPLZ.Text = Settings.Default.setPLZ;
            txtBxStrasse.Text = Settings.Default.setStrasse;
            txtBxVATID.Text = Settings.Default.setVATID;
            txtBLZ.Text = Settings.Default.setBLZ;
            txtIBAN.Text = Settings.Default.setIBAN;
            txtBxOrt.Text = Settings.Default.setOrt;
            txtBxBillerContact.Text = Settings.Default.setBillerContact;
            txBxBIC.Text = Settings.Default.setBIC;
            this.dsInvoice.LoadMwStDefaults();
            decimal DefaultMwSt = Settings.Default.setMwStDefault;
            if (Settings.Default.SetVStBerechtigt == false)
            {
                DefaultMwSt = 0;
                cBxDefaultMwSt.Enabled = false;
            }
            cBxDefaultMwSt.Text = DefaultMwSt.ToString("0.00");
            
            // Währung
            ebDoc.ThisDocument.InvXSD.FillCountryCCbox(cBxCurrency);
            // Bank Land
            ebDoc.ThisDocument.XlateTables.FillCountryCCbox(cBxBankCountry);
            // Rechnungsaussteller Land
            ebDoc.ThisDocument.XlateTables.FillCountryCCbox(cBxBillerCountry);
            // cbxSaveLocal.Checked = Settings.Default.setSaveLocal;
            tbxLocalFilePath.Text = Settings.Default.setLocalPath;
            tbxTemplatePath.Text = Settings.Default.setTemplatePath;
            ckBxVstBerechtigt.Checked = Settings.Default.SetVStBerechtigt;
            

        }
        private void btnInit_Click(object sender, EventArgs e)
        {
            SetDefaultValues();
        }


    }
}
